WAX技术指南第六期:如何在WAX负载平衡器上缓解API攻击
原文:EOSphere (Ross Dold) 翻译:WAX Eastern (NFT Gamer)
上一期的WAX技术指南介绍了安装和配置 HAProxy 的步骤,目的是为 WAX 协议网络 API 请求提供可靠的负载均衡器。即使您现在提供了 WAX 公会级别的服务,该服务仍然可以被贪婪或恶意的用户利用。
第6期 WAX 技术指南将介绍如何配置 HAProxy 响应策略以减少这些类型的威胁。
如何缓解 WAX 负载均衡器上的 API 攻击
在上一篇文章示例中,您会注意到全局部分和后端部分都配置了一个maxconn 变量。
maxconn 是一个硬性限制,当达到此阈值时,它将阻止超过指定的连接设置到 API 服务,然而它是敌友不分的,会同时阻止好的行为者和 API 滥用者。
HAProxy 有一种更优雅的方式来识别和限制滥用,本文将讨论其中两种机制。
滑动窗口速率限制
也称为实施拒绝列表,这是一种限制特定源 IP 地址的用户在一段时间内可以对您的 API 发出的请求数量的方法。
在配置示例中,每个源 IP 地址在 5 秒内允许的 API 请求限制为 200 个。这段时间是一个滑动窗口。如果达到阈值,则用户将被拒绝并收到 429 错误。
HTTP 错误 429 是一个 HTTP 响应状态代码,表示客户端应用程序已超过其速率限制,或它们可以在给定时间段内发送的请求数。
(图)用户收到的消息高于阈值
按照以下步骤配置haproxy.cfg 中的每个部分
> sudo nano
/etc/haproxy/haproxy.cfg
前端
frontend http-in
http-request track-sc0 src
table wax_api_servers
此配置在 HAProxy 中创建一个特定的表格。
后端
backend wax_api_servers
stick-table type ip size 50k
expire 30s store
http_req_rate(5s)
http-request deny
deny_status 429 if {
sc_http_req_rate(0) gt 200 }
此配置将策略应用于特定后端。
保存并退出haproxy.cfg ,检查您的配置并重新启动服务。
> haproxy -c -V -f
/etc/haproxy/haproxy.cfg
Configuration file is valid
> sudo service haproxy restart
> sudo service haproxy status
Active: active (running)
如果您将 Statistics 仪表板与 Prometheus 一起使用,您可以看到达到此阈值并被 429 拒绝的 API 用户数。-HTTP 4xx 响应:
蜜罐(Tarpit)
拒绝列表示例立即通知潜在的滥用者他们已被拒绝,通常会在几毫秒内提示重试。HAProxy Tarpit 的响应策略会接受客户端的连接,但会等待预定义的时间后返回拒绝响应(本例中为 10 秒)。这会占用恶意用户的资源,限制他们继续攻击您的 API 的能力。
基本上 tarpit 是通过用 tarpit 替换 deny 在 stick-list 策略中配置的。
按照以下配置haproxy.cfg 中的每个部分来修改以前的策略。
> sudo nano
/etc/haproxy/haproxy.cfg
后端
backend wax_api_servers
stick-table type ip size 50k
expire 30s store
http_req_rate(5s)
http-request tarpit
deny_status 429 if {
sc_http_req_rate(0) gt 200 }
timeout tarpit 10s
此配置将策略应用于特定后端并将延迟设置为 10 秒。
保存并退出haproxy.cfg ,检查您的配置并重新启动服务。
> haproxy -c -V -f /etc/haproxy/haproxy.cfg
Configuration file is valid
> sudo service haproxy restart
> sudo service haproxy status
Active: active (running)
防失联,加入橘猫玩家公会:
Telegram:https://t.me/NFTGamerChina
Discord:https://discord.gg/NU82sXeTNs
抢抓机遇,增创优势,创新辉煌。